package cms.model.dao; import cms.model.model.PageEntity; import cms.model.meta.PageEntityMeta; import cms.model.model.PageTagEntity; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.Transaction; import java.util.ConcurrentModificationException; import java.util.List; import org.slim3.datastore.Datastore; import org.slim3.datastore.EntityNotFoundRuntimeException; public class PageDAO implements DAO { private PageEntityMeta meta = PageEntityMeta.get(); public List<PageEntity> getAll() { List<PageEntity> pageEntities = Datastore.query(meta) //.sort(pageMeta.position.desc) .asList(); return pageEntities; } public List<PageEntity> getVisible() { List<PageEntity> pageEntities = Datastore.query(meta) .filter(meta.visible.equal(true)) //.sort(pageMeta.position.desc) .asList(); return pageEntities; } public PageEntity get(Key key) { PageEntity pageEntity = null; try { pageEntity = Datastore.get(PageEntity.class, key); } catch (EntityNotFoundRuntimeException e) { return null; } return pageEntity; } public PageEntity getByUrl(String url) { PageEntity pageEntity = Datastore.query(meta) .filter(meta.url.equal(url)).asSingle(); return pageEntity; } public PageEntity getVisibleByUrl(String url) { PageEntity pageEntity = Datastore.query(meta) .filter(meta.url.equal(url)) .filter(meta.visible.equal(true)).asSingle(); return pageEntity; } public PageEntity insert(PageEntity pageEntity) { Transaction tx = Datastore.beginTransaction(); Datastore.put(tx, pageEntity); tx.commit(); return pageEntity; } public PageEntity edit(PageEntity pageEntity) throws ConcurrentModificationException { Transaction tx = Datastore.beginTransaction(); try { Datastore.get(tx, PageEntity.class, pageEntity.getKey(), pageEntity.getVersion()); Datastore.put(tx, pageEntity); tx.commit(); } catch (ConcurrentModificationException e) { if (tx.isActive()) { tx.rollback(); } throw e; } return pageEntity; } public void delete(Key key, Long version) throws ConcurrentModificationException { Transaction tx = Datastore.beginTransaction(); try { PageEntity pageEntity = Datastore.get(tx, meta, key, version); for (PageTagEntity pageTagEntity : pageEntity.getPageTagListRef().getModelList()) { Datastore.deleteWithoutTx(pageTagEntity.getKey()); } Datastore.delete(tx, pageEntity.getKey()); tx.commit(); } catch (ConcurrentModificationException e) { if (tx.isActive()) { tx.rollback(); } throw e; } } }